package reflect.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*
 * 注解的创建
 * 注解在意义上可以使用在任何地方上，如，方法上，属性上，参数前 等等
 *
 * 元注解:在注解上使用来说明用途
 *
 * @Target() 表明此注解希望使用在什么地方
 * @Target(ElementType.TYPE)
 * 表示被@Target(ElementType.TYPE)标注的注解只能使用在类上
 *              ElementType.TYPE：能修饰类、接口或枚举类型
                ElementType.FIELD：能修饰成员变量
                ElementType.METHOD：能修饰方法
                ElementType.PARAMETER：能修饰参数
                ElementType.CONSTRUCTOR：能修饰构造器
                ElementType.LOCAL_VARIABLE：能修饰局部变量
                ElementType.ANNOTATION_TYPE：能修饰注解
                ElementType.PACKAGE：能修饰包
 * @Retention()  用于定义当前注解的保留级别，保留级别分为三种，定义在RetentionPolicy中
 * RetentionPolicy.CLASS 默认的保留级别,当前注解保留到编译后的字节码文件中，但是不可被反射机制访问
 *                 RUNTIME 当前注解保留到编译后的字节码文件中，可被反射机制访问
 *                 SOURCE   当前注解仅保留在源代码中，编译为字节码后不保留该注解
 * */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
